<?php
class Delivery_Model_DbTable_OpcionesFamiliasProductos
	extends Delivery_Model_DbTable_Abstract

{
	protected $_name = 'opciones_familias_productos';
	protected $_primary = 'idOpcionFamiliaProducto';
	
	public function insert( $opcion ){
		return parent::insert(		
			$this->_getData( $opcion )
		);	
	}
	
	public function update( $opcion ){
		
		return parent::update(
			$this->_getData( $opcion )  ,
			array('idOpcionFamiliaProducto = ?' => $opcion->getId())
		
		);
	}

	public function delete( $opcion ){
		return parent::delete(
			array( 'idOpcionFamiliaProducto = ?' => $opcion->getId())
		);
	}
	
	public function getById( $idOpcionFamiliaProducto ){
		
		return 
			$this->_db->fetchRow(
				$this->select()->where('idOpcionFamiliaProducto = ?', $idOpcionFamiliaProducto, Zend_Db::INT_TYPE)
			);
	}
	
//	/**
//	 * @param array $ids
//	 * @return array:
//	 */
//	public function getByIds( $ids )
//	{
//		return $this->getAdapter()->fetchAll(
//			$this->select()->where( 'idCategoria IN (?)', $ids, Zend_Db::INT_TYPE),
//			null,
//			Zend_Db::FETCH_ASSOC
//		);		
//	}
	
	/**
	 * @param array $ids
	 * @return array:
	 */
	public function getByProducto( $idProducto )
	{
		$select = $this->select();
		
		
		// usar siempre asi cuando hay un join
		 $select = $this->select(self::SELECT_WITH_FROM_PART)
		 				->setIntegrityCheck(false)
		 						
	             		->join(	'opciones_familias',
	             				'opciones_familias_productos.idOpcionFamilia = opciones_familias.idOpcionFamilia');
		
		
		
		if ( is_int($idProducto) ){
			$select->where('idProducto = ?', $idProducto, Zend_Db::INT_TYPE);
		} else {
			$select->where('idProducto IN (?)', $idProducto, Zend_Db::INT_TYPE);
		}	
		
		return $this->_db->fetchAll($select);
	}
	
	public function getAll(){
					
		return 
			$this->_db->fetchAssoc(
				$this->select()					
			);
	}
	
    public function getByParams( $params, $offset = null, $limit = null, $order = null ){
		
		$select = $this->select();
			
        if ( isset($params['idProducto'])){
			$select->where('idProducto = ?', $params['idProducto'], Zend_Db::INT_TYPE);
		}
		
		if ( $order ){
			$select->order( $order );
		}
		
		if ( $limit && !is_null($offset) ){
			$select->limit( $limit, $offset );
		}
		
		return $this->_db->fetchAssoc($select);
	}
	
	public function countByParams( $params )
	{
		$select = $this->select()
				->from($this, array('count' => 'COUNT(1)'));
		
	    if ( isset($params['idProducto'])){
			$select->where('idProducto = ?', $params['idProducto'], Zend_Db::INT_TYPE);
		}
		
		$result = $this->_db->fetchRow($select);
		
		return $result['count'];
	}
	
	
	protected function _getData( $object )
	{
		return array (
			'idProducto'		=> $object->idProducto,
   			'idOpcionFamilia'	=> $object->idOpcionFamilia,	   			
   			'minimo'			=> $object->minimo,
   			'maximo'			=> $object->maximo,
		    'cantidadPorOpcion'	=> $object->cantidadPorOpcion
   		);
	} 
	
	
}